<?php
/**
 * Description of CookieClass
 *
 * @author 半支烟
 */
class CookieModel 
{
	//put your code here
	///加密
	public static function jiami($str) 
    {
        if(strlen($str) > 0)
		{
			$str = self::encrypt($str);
		}
		return $str;
	}

	///解密
	public static function jiemi($str)
    {
		if(strlen($str) > 0)
		{
			$str = self::decrypt($str);
		}
		return $str;
	}

	public static function setcookies($key, $value, $time = 0, $url = "/",$domain="",$secure=0) 
    {
		if (!empty($value)) {
			$value = self::jiami($value); 
		}
		
		setcookie($key, $value, $time, $url,$domain,$secure) or die("cookie设置失败");
	}
	public static function clearcookies($key, $url = "/",$domain='')
	{
		if(isset($_COOKIE[$key]))
		{
			unset($_COOKIE[$key]);
		}
	}

	public static function getcookies($key) 
        {
		$val = "";
		if (isset($_COOKIE[$key])) {
			$val = $_COOKIE[$key];
			if(!empty($val))
			{
				$val = self::jiemi($val);
			}			
		}
		return $val;
	}
	public static function getsession($key)
	{
		$val = '';
		if(isset($_SESSION[$key]))
		{
			$val = $_SESSION[$key];
		}
		return $val;
	}
	public static function setsession($key,$value)
	{
		$_SESSION[$key] = $value;
	}
	public static function clearsession($key)
	{
		if(isset($_SESSION[$key]))
		{
			unset($_SESSION[$key]);
		}
	}




		////封装了 aes 的加密
	/**
     * var string $method 加解密方法，可通过openssl_get_cipher_methods()获得
     */
    protected static $method ='AES-128-CBC';
 
    /**
     * var string $secret_key 加解密的密钥
     */
    protected static $secret_key = 'xhn.com';
 
    /**
     * var string $iv 加解密的向量，有些方法需要设置比如CBC : 长度是16位
     */
    protected static $iv = '1975325410698325';
 
    /**
     * var string $options （1为会用PKCS#7进行补位）
     */
    protected static $options = 1;
 
    /**
     * 构造函数
     *
     * @param string $key 密钥
     * @param string $iv iv向量
     * @param string $method 加密方式
     * @param mixed $options 
     * https://blog.csdn.net/zhemejinnameyuanxc/article/details/83383434
     *  0
        OPENSSL_RAW_DATA=1  ：会用PKCS#7进行补位
        OPENSSL_ZERO_PADDING=2
        OPENSSL_NO_PADDING=3
     *
     */
 
    /**
     * 加密方法，对数据进行加密，返回加密后的数据
     *
     * @param string $data 要加密的数据
     *
     * @return string
     *
     */
    public static function encrypt($data)
    {
        $en = openssl_encrypt($data, self::$method, self::$secret_key, self::$options, self::$iv);
        $en = self::String2Hex($en);
        return $en;
    }
 
    /**
     * 解密方法，对数据进行解密，返回解密后的数据
     *
     * @param string $data 要解密的数据
     *
     * @return string
     *
     */
    public static function decrypt($data)
    {
        $data = self::Hex2String($data);
        $de = openssl_decrypt($data, self::$method, self::$secret_key, self::$options, self::$iv);
        return $de;
    }
 
 
	public static function String2Hex($string)
	{
        $hex='';
//        for ($i=0; $i < strlen($string); $i++){
//            $hex .= dechex(ord($string[$i]));
//        }
        $hex = bin2hex($string);
        return $hex;
    }
 
	public static function Hex2String($hex)
	{
        $string='';
        for ($i=0; $i < strlen($hex)-1; $i+=2){
            $string .= chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return $string;
    }

    //------end aes 加密方法
}
